{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.2.0+cu92'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "from PIL import Image\n",
    "import matplotlib.pyplot as plt\n",
    "#from pytorchtools import EarlyStopping\n",
    "\n",
    "import torch \n",
    "import torch.nn as nn \n",
    "import torch.optim as optim \n",
    "import torch.nn.functional as F \n",
    "from torch.autograd import Variable\n",
    "from torchvision import datasets, transforms \n",
    "from torch.utils.data import Dataset, DataLoader\n",
    "from torch.utils.data.sampler import  WeightedRandomSampler\n",
    "torch.__version__"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 超参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "EPOCHS = 50 # 总共训练批次\n",
    "BATCH_SIZE = 60 #批数据量\n",
    "train_data_ratio = 0.8 #划分训练数据比例"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 加载数据（训练测试比8：2、图片预处理）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#数据集加载函数\n",
    "def default_loader(path):\n",
    "    return Image.open(path).convert('RGB') #转三通道rgb图像\n",
    "\n",
    "#custom一个Dataset类\n",
    "class MyDataset(Dataset):\n",
    "    def __init__(self, txt, transform=None, target_transform=None, loader=default_loader):\n",
    "        fh = open(txt, 'r')\n",
    "        imgs = []\n",
    "        for line in fh:\n",
    "            line = line.strip('\\n')\n",
    "            line = line.rstrip()\n",
    "            words = line.split()\n",
    "            imgs.append((words[0],words[1]))\n",
    "        self.imgs = imgs\n",
    "        self.transform = transform\n",
    "        self.target_transform = target_transform\n",
    "        self.loader = loader\n",
    "\n",
    "    def __getitem__(self, index):\n",
    "        fn, label = self.imgs[index]\n",
    "        img = self.loader(os.path.join('CropedData',fn+'.jpg'))\n",
    "        if self.transform is not None:\n",
    "            img = self.transform(img)\n",
    "        if label == \"benign\":\n",
    "            label = 0\n",
    "        else:\n",
    "            label = 1\n",
    "        return img, label\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.imgs)\n",
    "    \n",
    "#这个类用来分别划分训练和验证dataset\n",
    "class MyDataset2(Dataset):\n",
    "    def __init__(self, dataset, transform):\n",
    "        self.dataset=dataset\n",
    "        self.transform=transform\n",
    "    def __len__(self):\n",
    "        return len(self.dataset)\n",
    "    def __getitem__(self, index):\n",
    "        img, label=self.dataset[index]\n",
    "        img = self.transform(img)\n",
    "        return img, label\n",
    "\n",
    "\n",
    "full_dataset = MyDataset(txt='TrainingGroundTruth.txt') #, target_transform=transforms.ToTensor()\n",
    "#划分训练测试集 \n",
    "train_size = int(train_data_ratio * len(full_dataset))\n",
    "test_size = len(full_dataset) - train_size\n",
    "train_dataset, test_dataset = torch.utils.data.random_split(full_dataset, [train_size, test_size])\n",
    "#对训练集和测试集分别进行transform\n",
    "train_transform=transforms.Compose([\n",
    "                                    transforms.Resize(600),\n",
    "                                    transforms.RandomCrop(224),\n",
    "                                    transforms.RandomRotation(180),\n",
    "                                    transforms.RandomHorizontalFlip(p=0.5),\n",
    "                                    transforms.RandomVerticalFlip(p=0.5),\n",
    "                                    transforms.ColorJitter(brightness=0.5, contrast=0.5), #, saturation=0.1, hue=0.1\n",
    "                                    transforms.ToTensor(),\n",
    "                                    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) #mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]\n",
    "])\n",
    "val_transform=transforms.Compose([\n",
    "        transforms.Resize(600),\n",
    "        transforms.RandomCrop(224),\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) #[0.5, 0.5, 0.5], [0.5, 0.5, 0.5]\n",
    "])\n",
    "train_dataset2=MyDataset2(train_dataset,transform=train_transform)\n",
    "test_dataset2=MyDataset2(test_dataset,transform=val_transform)\n",
    "#加权\n",
    "train_weights = [0.8 if label == 1 else 0.2 for data, label in train_dataset2]\n",
    "test_weights = [0.8 if label == 1 else 0.2 for data, label in test_dataset2]\n",
    "#按类别权重采样\n",
    "train_sampler = WeightedRandomSampler(train_weights,\n",
    "                                num_samples=train_size,\n",
    "                                replacement=True)\n",
    "test_sampler = WeightedRandomSampler(test_weights,\n",
    "                                num_samples=test_size,\n",
    "                                replacement=True)\n",
    "#加载数据\n",
    "train_loader = DataLoader(train_dataset2, batch_size=BATCH_SIZE, sampler=train_sampler)\n",
    "test_loader = DataLoader(test_dataset2, batch_size=BATCH_SIZE, sampler=test_sampler)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class ConvNet(nn.Module):\n",
    "    def __init__(self):\n",
    "        super().__init__()\n",
    "        self.conv1 = nn.Conv2d(3, 10, 3) #输入三通道、输出十通道、卷积核大小为3，下同\n",
    "        self.conv2 = nn.Conv2d(10, 30, 3)\n",
    "#         self.conv3 = nn.Conv2d(64, 256, 3) #两层不够可以试试三层\n",
    "        self.fc1 = nn.Linear(87480, 500) \n",
    "        self.fc2 = nn.Linear(500, 20)  \n",
    "        self.fc3 = nn.Linear(20, 2)\n",
    "    def forward(self,x):\n",
    "        in_size = x.size(0) \n",
    "        out = self.conv1(x)  \n",
    "        out = F.relu(out,inplace=True)   \n",
    "        out = F.max_pool2d(out, 2, 2)  \n",
    "        out = self.conv2(out)  \n",
    "        out = F.relu(out,inplace=True)  \n",
    "        out = F.max_pool2d(out, 2, 2)\n",
    "#         out = self.conv3(out)  \n",
    "#         out = F.relu(out,inplace=True)  \n",
    "#         out = F.max_pool2d(out, 2, 2)\n",
    "        \n",
    "        out = out.view(in_size, -1) \n",
    "        out = self.fc1(out) \n",
    "        out = F.dropout(out, 0.2)\n",
    "        out = F.relu(out,inplace=True) \n",
    "        out = self.fc2(out) \n",
    "        out = F.dropout(out, 0.2)\n",
    "        out = F.relu(out,inplace=True) \n",
    "        out = self.fc3(out) \n",
    "#         out = F.log_softmax(out, dim=1) #使用 nn.CrossEntropyLoss()作为损失函数时不需要再网络中加入softmax\n",
    "        return out"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 选择优化器&选择训练的device"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "DEVICE = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\") #使用GPU训练\n",
    "from torchvision.models import resnet18\n",
    "model = resnet18(pretrained = True)\n",
    "num_fc_ftr = model.fc.in_features\n",
    "model.fc = torch.nn.Linear(num_fc_ftr, 2)\n",
    "# 加载\n",
    "# model = torch.load('E:\\model.pkl')\n",
    "model = model.to(DEVICE)\n",
    "optimizer = optim.Adam(model.parameters(), lr = 1e-6, weight_decay = 1e-5) # lr = 0.001  lr = 0.0001, weight_decay = 1e-5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def checkpoint(epoch, model, optimizer, val_loss, val_accu, file_path=\"./model/checkpoint.pth\"):\n",
    "    #保存模型checkpoint\n",
    "    state = {\n",
    "        'epoch': epoch,\n",
    "        'model': model.state_dict(),\n",
    "        'optimizer': optimizer.state_dict(),\n",
    "        'val_loss': val_loss,\n",
    "        'val_acc': val_accu\n",
    "    }\n",
    "    \n",
    "    torch.save(state, file_path)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义训练函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def train(model, device, train_loader, optimizer, epoch):\n",
    "    model.train()\n",
    "    correct = 0\n",
    "    losses = 0.\n",
    "    #early_stopping = EarlyStopping(patience=patience, verbose=True)\n",
    "    for batch_idx, (data, target) in enumerate(train_loader):\n",
    "        #数据放入device\n",
    "        data, target = data.to(device), target.to(device)\n",
    "        #梯度清零\n",
    "        optimizer.zero_grad()\n",
    "        #前向传播\n",
    "        output = model(data)\n",
    "        #损失函数+反向传播+更新\n",
    "        m = nn.CrossEntropyLoss()\n",
    "        loss = m(output, target)\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        #统计预测结果\n",
    "        pred = output.max(1, keepdim=True)[1] # 找到概率最大的下标\n",
    "        correct += pred.eq(target.view_as(pred)).sum().item()\n",
    "        losses += loss.item()\n",
    "#         if(batch_idx+1)%5 == 0: \n",
    "#             print('Train Epoch: {} [{}/{} ({:.0f}%)]\\tLoss: {:.6f}'.format(\n",
    "#                 epoch, batch_idx * len(data), len(train_loader.dataset),loss.item()\n",
    "#              ))\n",
    "    #计算loss和accuracy\n",
    "    train_loss, train_accu = losses / len(train_loader.dataset),  correct / len(train_loader.dataset)\n",
    "    print('\\nTrain set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n",
    "        train_loss, correct, len(train_loader.dataset), 100. * train_accu\n",
    "        ))\n",
    "    return train_loss, train_accu"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 定义测试函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def test(model, device, test_loader):\n",
    "    model.eval()\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    TP, TN = 0, 0\n",
    "    FP, FN = 0, 0\n",
    "    with torch.no_grad():\n",
    "        for data, target in test_loader: \n",
    "            #数据放入device\n",
    "            data, target = data.to(device), target.to(device)\n",
    "            #前向传播\n",
    "            output = model(data)\n",
    "            #损失函数\n",
    "            m = nn.CrossEntropyLoss()\n",
    "            loss = m(output, target)\n",
    "            test_loss += loss.item()\n",
    "            #统计预测结果\n",
    "            pred = output.max(1, keepdim=True)[1] # 找到概率最大的下标\n",
    "            correct += pred.eq(target.view_as(pred)).sum().item()\n",
    "            #计算True Positive、True Negative、False Positive、False Negative\n",
    "            TP += (((pred == 1) & (target.view_as(pred).data == 1)).sum())\n",
    "            TN += (((pred == 0) & (target.view_as(pred).data == 0)).sum())\n",
    "            FP += (((pred == 1) & (target.view_as(pred).data == 0)).sum())\n",
    "            FN += (((pred == 0) & (target.view_as(pred).data == 1)).sum())\n",
    "    #计算loss、accuracy、灵敏度（召回率）sensitivity（recall）、特异度specificity\n",
    "    test_loss /= len(test_loader.dataset)\n",
    "    test_accu = correct / len(test_loader.dataset)\n",
    "    recall =  TP.item() / (TP + FN).item()\n",
    "    specificity = TN.item() / (TN + FP).item()\n",
    "#     print(TP, TN)\n",
    "#     print(FN, FP)\n",
    "#     print(recall, specificity)\n",
    "    print('\\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\\n'.format(\n",
    "        test_loss, correct, len(test_loader.dataset), 100. * test_accu\n",
    "        ))\n",
    "    return test_loss, test_accu, recall, specificity"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练&结果显示"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 1\n",
      "\n",
      "Train set: Average loss: 0.0127, Accuracy: 393/720 (55%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0115, Accuracy: 95/180 (53%)\n",
      "\n",
      "1/50  => saving checkpoint with  val_loss:0.011534  val_accu:0.527778\n",
      "epoch: 2\n",
      "\n",
      "Train set: Average loss: 0.0124, Accuracy: 410/720 (57%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0113, Accuracy: 96/180 (53%)\n",
      "\n",
      "2/50  => saving checkpoint with  val_loss:0.011333  val_accu:0.533333\n",
      "epoch: 3\n",
      "\n",
      "Train set: Average loss: 0.0120, Accuracy: 410/720 (57%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0110, Accuracy: 105/180 (58%)\n",
      "\n",
      "3/50  => saving checkpoint with  val_loss:0.010988  val_accu:0.583333\n",
      "epoch: 4\n",
      "\n",
      "Train set: Average loss: 0.0116, Accuracy: 416/720 (58%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0108, Accuracy: 113/180 (63%)\n",
      "\n",
      "4/50  => saving checkpoint with  val_loss:0.010788  val_accu:0.627778\n",
      "epoch: 5\n",
      "\n",
      "Train set: Average loss: 0.0113, Accuracy: 424/720 (59%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0110, Accuracy: 104/180 (58%)\n",
      "\n",
      "epoch: 6\n",
      "\n",
      "Train set: Average loss: 0.0106, Accuracy: 454/720 (63%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0110, Accuracy: 108/180 (60%)\n",
      "\n",
      "epoch: 7\n",
      "\n",
      "Train set: Average loss: 0.0105, Accuracy: 464/720 (64%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0109, Accuracy: 116/180 (64%)\n",
      "\n",
      "epoch: 8\n",
      "\n",
      "Train set: Average loss: 0.0103, Accuracy: 476/720 (66%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0109, Accuracy: 115/180 (64%)\n",
      "\n",
      "epoch: 9\n",
      "\n",
      "Train set: Average loss: 0.0105, Accuracy: 465/720 (65%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0100, Accuracy: 118/180 (66%)\n",
      "\n",
      "9/50  => saving checkpoint with  val_loss:0.009964  val_accu:0.655556\n",
      "epoch: 10\n",
      "\n",
      "Train set: Average loss: 0.0103, Accuracy: 468/720 (65%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0104, Accuracy: 117/180 (65%)\n",
      "\n",
      "epoch: 11\n",
      "\n",
      "Train set: Average loss: 0.0100, Accuracy: 473/720 (66%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0095, Accuracy: 133/180 (74%)\n",
      "\n",
      "11/50  => saving checkpoint with  val_loss:0.009456  val_accu:0.738889\n",
      "epoch: 12\n",
      "\n",
      "Train set: Average loss: 0.0102, Accuracy: 476/720 (66%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0109, Accuracy: 116/180 (64%)\n",
      "\n",
      "epoch: 13\n",
      "\n",
      "Train set: Average loss: 0.0099, Accuracy: 484/720 (67%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0103, Accuracy: 120/180 (67%)\n",
      "\n",
      "epoch: 14\n",
      "\n",
      "Train set: Average loss: 0.0097, Accuracy: 498/720 (69%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0096, Accuracy: 125/180 (69%)\n",
      "\n",
      "epoch: 15\n",
      "\n",
      "Train set: Average loss: 0.0099, Accuracy: 493/720 (68%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0106, Accuracy: 119/180 (66%)\n",
      "\n",
      "epoch: 16\n",
      "\n",
      "Train set: Average loss: 0.0098, Accuracy: 484/720 (67%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0094, Accuracy: 129/180 (72%)\n",
      "\n",
      "epoch: 17\n",
      "\n",
      "Train set: Average loss: 0.0096, Accuracy: 502/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0107, Accuracy: 114/180 (63%)\n",
      "\n",
      "epoch: 18\n",
      "\n",
      "Train set: Average loss: 0.0093, Accuracy: 503/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0101, Accuracy: 116/180 (64%)\n",
      "\n",
      "epoch: 19\n",
      "\n",
      "Train set: Average loss: 0.0097, Accuracy: 503/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0095, Accuracy: 130/180 (72%)\n",
      "\n",
      "epoch: 20\n",
      "\n",
      "Train set: Average loss: 0.0097, Accuracy: 501/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0100, Accuracy: 122/180 (68%)\n",
      "\n",
      "epoch: 21\n",
      "\n",
      "Train set: Average loss: 0.0088, Accuracy: 536/720 (74%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0099, Accuracy: 122/180 (68%)\n",
      "\n",
      "epoch: 22\n",
      "\n",
      "Train set: Average loss: 0.0093, Accuracy: 499/720 (69%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0111, Accuracy: 119/180 (66%)\n",
      "\n",
      "epoch: 23\n",
      "\n",
      "Train set: Average loss: 0.0095, Accuracy: 501/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0104, Accuracy: 111/180 (62%)\n",
      "\n",
      "epoch: 24\n",
      "\n",
      "Train set: Average loss: 0.0093, Accuracy: 501/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0096, Accuracy: 128/180 (71%)\n",
      "\n",
      "epoch: 25\n",
      "\n",
      "Train set: Average loss: 0.0093, Accuracy: 515/720 (72%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0100, Accuracy: 120/180 (67%)\n",
      "\n",
      "epoch: 26\n",
      "\n",
      "Train set: Average loss: 0.0096, Accuracy: 505/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0095, Accuracy: 125/180 (69%)\n",
      "\n",
      "epoch: 27\n",
      "\n",
      "Train set: Average loss: 0.0094, Accuracy: 505/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0114, Accuracy: 116/180 (64%)\n",
      "\n",
      "epoch: 28\n",
      "\n",
      "Train set: Average loss: 0.0091, Accuracy: 521/720 (72%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0097, Accuracy: 124/180 (69%)\n",
      "\n",
      "epoch: 29\n",
      "\n",
      "Train set: Average loss: 0.0085, Accuracy: 533/720 (74%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0094, Accuracy: 125/180 (69%)\n",
      "\n",
      "epoch: 30\n",
      "\n",
      "Train set: Average loss: 0.0093, Accuracy: 493/720 (68%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0092, Accuracy: 129/180 (72%)\n",
      "\n",
      "epoch: 31\n",
      "\n",
      "Train set: Average loss: 0.0092, Accuracy: 501/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0111, Accuracy: 114/180 (63%)\n",
      "\n",
      "epoch: 32\n",
      "\n",
      "Train set: Average loss: 0.0094, Accuracy: 510/720 (71%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0095, Accuracy: 136/180 (76%)\n",
      "\n",
      "epoch: 33\n",
      "\n",
      "Train set: Average loss: 0.0087, Accuracy: 528/720 (73%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0112, Accuracy: 108/180 (60%)\n",
      "\n",
      "epoch: 34\n",
      "\n",
      "Train set: Average loss: 0.0090, Accuracy: 511/720 (71%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0104, Accuracy: 122/180 (68%)\n",
      "\n",
      "epoch: 35\n",
      "\n",
      "Train set: Average loss: 0.0089, Accuracy: 521/720 (72%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0106, Accuracy: 117/180 (65%)\n",
      "\n",
      "epoch: 36\n",
      "\n",
      "Train set: Average loss: 0.0092, Accuracy: 502/720 (70%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0091, Accuracy: 127/180 (71%)\n",
      "\n",
      "epoch: 37\n",
      "\n",
      "Train set: Average loss: 0.0091, Accuracy: 513/720 (71%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0115, Accuracy: 114/180 (63%)\n",
      "\n",
      "epoch: 38\n",
      "\n",
      "Train set: Average loss: 0.0084, Accuracy: 531/720 (74%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0091, Accuracy: 127/180 (71%)\n",
      "\n",
      "epoch: 39\n",
      "\n",
      "Train set: Average loss: 0.0084, Accuracy: 536/720 (74%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0124, Accuracy: 111/180 (62%)\n",
      "\n",
      "epoch: 40\n",
      "\n",
      "Train set: Average loss: 0.0088, Accuracy: 527/720 (73%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0114, Accuracy: 114/180 (63%)\n",
      "\n",
      "epoch: 41\n",
      "\n",
      "Train set: Average loss: 0.0090, Accuracy: 514/720 (71%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0108, Accuracy: 111/180 (62%)\n",
      "\n",
      "epoch: 42\n",
      "\n",
      "Train set: Average loss: 0.0084, Accuracy: 532/720 (74%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0098, Accuracy: 128/180 (71%)\n",
      "\n",
      "epoch: 43\n",
      "\n",
      "Train set: Average loss: 0.0090, Accuracy: 522/720 (72%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0109, Accuracy: 113/180 (63%)\n",
      "\n",
      "epoch: 44\n",
      "\n",
      "Train set: Average loss: 0.0086, Accuracy: 530/720 (74%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0082, Accuracy: 144/180 (80%)\n",
      "\n",
      "44/50  => saving checkpoint with  val_loss:0.008225  val_accu:0.800000\n",
      "epoch: 45\n",
      "\n",
      "Train set: Average loss: 0.0087, Accuracy: 526/720 (73%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0091, Accuracy: 132/180 (73%)\n",
      "\n",
      "epoch: 46\n",
      "\n",
      "Train set: Average loss: 0.0082, Accuracy: 544/720 (76%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0099, Accuracy: 122/180 (68%)\n",
      "\n",
      "epoch: 47\n",
      "\n",
      "Train set: Average loss: 0.0083, Accuracy: 540/720 (75%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0101, Accuracy: 119/180 (66%)\n",
      "\n",
      "epoch: 48\n",
      "\n",
      "Train set: Average loss: 0.0084, Accuracy: 545/720 (76%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0103, Accuracy: 120/180 (67%)\n",
      "\n",
      "epoch: 49\n",
      "\n",
      "Train set: Average loss: 0.0086, Accuracy: 524/720 (73%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0098, Accuracy: 130/180 (72%)\n",
      "\n",
      "epoch: 50\n",
      "\n",
      "Train set: Average loss: 0.0083, Accuracy: 520/720 (72%)\n",
      "\n",
      "\n",
      "Test set: Average loss: 0.0102, Accuracy: 126/180 (70%)\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\ngg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "best_val_accu = 0.0\n",
    "best_val_loss = float('inf')\n",
    "PATIENCE = 100\n",
    "monitor = None\n",
    "monitor = float('inf')\n",
    "epoch_left = PATIENCE\n",
    "train_losses = []\n",
    "train_accus = []\n",
    "test_losses = []\n",
    "test_accus = []\n",
    "sensitivities = []\n",
    "specificities = []\n",
    "for epoch in range(1, EPOCHS + 1):\n",
    "    print(\"epoch:\",epoch)\n",
    "    train_loss, train_accu = train(model, DEVICE, train_loader, optimizer, epoch)\n",
    "    train_losses.append(train_loss)\n",
    "    train_accus.append(train_accu)\n",
    "    val_loss, val_accu, sensitivity, specificity = test(model, DEVICE, test_loader)\n",
    "    test_losses.append(val_loss)\n",
    "    test_accus.append(val_accu)\n",
    "    sensitivities.append(sensitivity)\n",
    "    specificities.append(specificity)\n",
    "    \n",
    "    if (val_accu > best_val_accu) and (val_loss <= best_val_loss):\n",
    "        checkpoint(epoch, model, optimizer, val_loss, val_accu, \"E:\\checkpoint.pth\")\n",
    "        print(f\"{epoch}/{EPOCHS}  => saving checkpoint with  val_loss:{val_loss:2.6f}  val_accu:{val_accu:1.6f}\")\n",
    "        best_val_accu = val_accu\n",
    "        best_val_loss = val_loss\n",
    "        monitor = val_loss\n",
    "        epoch_left = PATIENCE\n",
    "        \n",
    "    elif val_loss > monitor:\n",
    "        epoch_left -= 1\n",
    "        if epoch_left == 0:\n",
    "            break\n",
    "#loss数据\n",
    "plt.plot(range(1,len(train_losses)+1), train_losses,'bo',label = 'train_loss')\n",
    "plt.plot(range(1,len(test_losses)+1), test_losses,'r',label = 'test_loss')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "#accuracy数据    \n",
    "plt.plot(range(1,len(train_accus)+1), train_accus,'bo',label = 'train_accuracy')\n",
    "plt.plot(range(1,len(test_accus)+1), test_accus,'r',label = 'test_accuracy')\n",
    "plt.legend()\n",
    "plt.show()\n",
    "#灵敏度特异度数据\n",
    "plt.plot(range(1,len(sensitivities)+1), sensitivities,'bo',label = 'sensitivity')\n",
    "plt.plot(range(1,len(specificities)+1), specificities,'r',label = 'specificity')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 保存\n",
    "torch.save(model, r'E:\\model.pkl')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "\n",
    "# 加载\n",
    "model = torch.load('E:\\model.pkl')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#清空缓存\n",
    "torch.cuda.empty_cache()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
